<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" lang="zh" xml:lang="zh">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>工具向导: 使用 Rational PurifyPlus 工具执行测试套件（Windows 和 UNIX）</title>
<meta content="ToolMentor" name="uma.type">
<meta content="executing_test_suites_using_purifyplus" name="uma.name">
<meta content="使用 Rational PurifyPlus 工具执行测试套件（Windows 和 UNIX）" name="uma.presentationName">
<meta content="Tool:rup_purifyplus:Rational PurifyPlus" name="uma.category">
<meta name="element_type" content="tool_mentor">
<meta content="Rational PurifyPlus" name="tool">
<meta content="description" name="filetype">
<meta name="role" content="">
<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
<script language="JavaScript" type="text/javascript" src="./../../../scripts/ContentPageResource.js"></script><script language="JavaScript" type="text/javascript" src="./../../../scripts/ContentPageSection.js"></script><script language="JavaScript" type="text/javascript" src="./../../../scripts/ContentPageSubSection.js"></script><script language="JavaScript" type="text/javascript" src="./../../../scripts/ContentPageToolbar.js"></script><script language="JavaScript" type="text/javascript" src="./../../../scripts/contentPage.js"></script><script language="JavaScript" type="text/javascript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=[{view: "view:_LVCagP5WEdmAzesbYywanQ", path: ["_LVCagP5WEdmAzesbYywanQ", "_mp7z0DIDEdqwaNnSEheSAg", "_9U7IkDIEEdqwaNnSEheSAg", "{F86573D5-C2E6-4E4F-9B29-23CC99B2BB8D}", "{0FBC2989-4BF7-4161-86A4-760F327D0E04}"]}, {view: "view:_LVCagP5WEdmAzesbYywanQ", path: ["_LVCagP5WEdmAzesbYywanQ", "_zRigkAILEdq-_NKqZM1EhA", "_U5tiUAISEdqTna4sZVFRow", "{F86573D5-C2E6-4E4F-9B29-23CC99B2BB8D}", "{0FBC2989-4BF7-4161-86A4-760F327D0E04}"]}, {view: "view:_LVCagP5WEdmAzesbYywanQ", path: ["_LVCagP5WEdmAzesbYywanQ", "_AUv4MAIMEdq-_NKqZM1EhA", "_5ZuQsAIUEdqEutyfYo0quQ", "{F86573D5-C2E6-4E4F-9B29-23CC99B2BB8D}", "{0FBC2989-4BF7-4161-86A4-760F327D0E04}"]}, {view: "view:_FCx1oN7CEdmsEI4YDGX2ag", path: ["_FCx1oN7CEdmsEI4YDGX2ag", "_jD8dUAIbEdqEutyfYo0quQ", "_F1OgYAIbEdqEutyfYo0quQ", "{F86573D5-C2E6-4E4F-9B29-23CC99B2BB8D}", "{0FBC2989-4BF7-4161-86A4-760F327D0E04}"]}];
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="{0FBC2989-4BF7-4161-86A4-760F327D0E04}"></div>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td nowrap="true" class="pageTitle">工具向导：使用 Rational PurifyPlus 工具执行测试套件（Windows 和 UNIX）</td><td width="100%">
<div id="contentPageToolbar" align="right"></div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td class="pageTitleSeparator"><img height="1" title="" alt="" src="./../../../images/shim.gif"></td>
</tr>
</table>
<div class="overview">
<table cellpadding="0" cellspacing="0" border="0" width="97%">
<tr>
<td width="50"><img title="" alt="" src="./../../../images/toolmentor.gif"></td><td>
<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
<tr>
<td valign="top">此工具向导描述如何在测试套件中使用 Rational PurifyPlus 工具来检测可能有害的内存错误和泄漏，以确保测试达到可接受的代码覆盖率级别，并使您注意到性能问题。</td>
</tr>
<tr>
<td>工具：<a href="./../../../core.base_rup/tools/rup_purifyplus_CABB5CD4.html" guid="{F86573D5-C2E6-4E4F-9B29-23CC99B2BB8D}">Rational PurifyPlus</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">关系</div>
<div class="sectionContent">
<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
<tr valign="top">
<th scope="row" class="sectionTableHeading">相关元素</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../core.base_rup/tasks/perform_developer_test_512B18D9.html" guid="{55EAEE66-A254-457F-BCC3-D1C21ED88134}">执行开发人员测试</a>
</li>
<li>
<a href="./../../../core.base_rup/tasks/execute_test_suite_492795DE.html" guid="{6B420194-5EB7-4A12-A061-09FAA5DC18DE}">执行测试套件</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">主要描述</div>
<div class="sectionContent">
<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
<tr valign="top">
<td class="sectionTableSingleCell"><a id="Top" name="Top"></a> 
<p>
    此工具向导适用于 Microsoft Windows 系统和 UNIX 系统。
</p>
<p>
    PurifyPlus 工具包含 Rational Purify、Rational PureCoverage 和 Rational Quantify。
</p>
<p>
    <img height="15" alt="帮助手册图标" hspace="0" src="./../../../core.base_rup/resources/book.gif" width="16" border="0" />要了解有关 PurifyPlus
    工具的更多信息，请参阅 PurifyPlus 的 <i>Getting Started</i> 手册（Windows 版本或 UNIX 版本）。
</p>
<p>
    <img height="16" alt="帮助手册图标" hspace="0" src="./../../../core.base_rup/resources/helpbook.gif" width="16" border="0" />有关使用 PurifyPlus
    工具的分步信息，请参阅工具的联机帮助。
</p>
<p>
    可使用 PurifyPlus 工具执行以下操作：
</p>
<ul>
    <li>
        <b>检测内存错误和泄漏（Windows 和 UNIX 上的 C/C++ 程序）。</b> 使用 Purify 可查明被测试的应用程序中的错误和泄漏。
    </li>
    <li>
        <b>监视代码覆盖率（Windows 和 UNIX）。</b> 使用 PureCoverage 可显示测试中的差距，并提醒您进行回归测试。
    </li>
    <li>
        <b>概要分析性能（Windows 和 UNIX）。</b> 使用 Quantify 可提醒您：新的检入是否使性能降级。
    </li>
</ul>
<p>
    使用 PurifyPlus 工具执行测试套件将产生以最大效率运行的无错误可靠代码。
</p><br />
<h4>
    工具步骤
</h4>
<p>
    要使用 PurifyPlus 工具实施测试：
</p>
<div style="MARGIN-LEFT: 2em">
    <ol>
        <li>
            <a href="#Step1">在 Purify 下运行程序来收集错误和泄漏数据（仅 C/C++ 程序）</a>
        </li>
        <li>
            <a href="#Step2">在 PureCoverage 下运行程序来监视代码覆盖率</a>
        </li>
        <li>
            <a href="#Step3">在 Quantify 下运行程序来概要分析性能</a>
        </li>
    </ol>
</div>
<h3>
    1. <a id="Step1" name="Step1"></a><b>在 Purify 下运行程序来收集错误和泄漏数据（仅 C/C++ 程序）&nbsp;</b>
</h3>
<p>
    Purify 将检测被测试的应用程序及其使用的组件中的运行时错误，包括内存泄漏。它报告内存错误（如数组范围错误、通过摇摆指针访问、未初始化的内存读取、内存分配错误和内存泄漏），以便将这些错误在造成任何损失之前解决掉。&nbsp;
</p>
<p>
    首先将 Purify 合并到您的现有 Perl 脚本、批处理文件和 makefile 中。
</p>
<ul>
    <li>
        <b>在 Windows 上</b>，修改用于运行程序 <font face="courier">&lt;ProgramName&gt;.exe</font> 的命令行<br />
         &nbsp;<br />
         <font face="courier">Purify /SaveTextData &lt;ProgramName&gt;.exe</font><br />
         &nbsp;
    </li>
    <li style="LIST-STYLE-TYPE: none">
        <br />
         &nbsp;
    </li>
    <li>
        <b>在 UNIX 上</b>，修改编译与链接行：<br />
         &nbsp;<br />
         <font face="courier">% purify -logfile=&lt;filename&gt; cc -g &lt;program_name&gt;.c</font>
    </li>
</ul>
<p>
    在 UNIX 上使用 <font face="courier">/SaveTextData</font> <font face="courier">-logfile</font> 选项会导致在没有用户界面的情况下运行
    Purify，且当您从脚本运行程序时，会在程序终止时向文本输出文件发送错误和泄露数据。
</p>
<p>
    自行检查此输出文件，或编写脚本来分析。可将文件中的错误和警告消息用作测试结果的额外条件。
</p>
<p>
    如果安装了 PureCoverage ，则可通过添加选项 <font face="courier">/Coverage</font>（Windows）或添加 <font face="courier">purecov</font>
    <font face="courier">purify</font>（UNIX）收集同一运行的覆盖率数据。您还可以使用覆盖率数据查找尚未检查错误的代码部分。有关使用覆盖率数据的更多信息，请参阅此工具向导的步骤 2。
</p>
<p>
    <b>注</b>：
</p>
<ul>
    <li>
        使用 Purify API 可从您的程序内部控制数据收集。
    </li>
    <li>
        Purify 还具有命令行选项，用于将测试数据保存为可使用 Purify 图形用户界面检查的二进制文件；工具向导“使用 Rational PurifyPlus 工具分析运行时性能”中探讨了此信息。
    </li>
</ul>
<p>
    <b><img height="16" alt="帮助手册图标" hspace="0" src="./../../../core.base_rup/resources/helpbook.gif" width="16" border="0" /></b>有关更多信息，请查看
    Purify 联机帮助索引中的以下主题：
</p>
<ul>
    <li>
        <i>running programs</i>
    </li>
    <li>
        <i>error messages</i>
    </li>
    <li>
        <i>options</i>
    </li>
    <li>
        <i>API functions</i>
    </li>
    <li>
        <i>saving data</i>
    </li>
</ul>
<h3>
    2. <a id="Step2" name="Step2"></a><b>在 PureCoverage 下运行程序来监视代码覆盖率。&nbsp;</b>
</h3>
<p>
    PureCoverage 提供了精确的行级别和函数级别的代码覆盖率信息。请将 PureCoverage 用于您的夜间测试来确保测试与代码开发保持相同的进度。
</p>
<p>
    首先将 PureCoverage 合并到您的现有 Perl 脚本、批处理文件和 makefile 中。
</p>
<ul>
    <li>
        <b>在 Windows 上</b>，修改运行您的程序或 Java 类文件、.jar 文件或 applet 的命令行，以包含 PureCoverage：<br />
         &nbsp;<br />
         对于 C/C++ 程序：<font face="courier">Coverage /SaveTextData &lt;ProgramName&gt;.exe</font><br />
         对于 Java 类文件：<font face="courier">Coverage /SaveTextData /Java Java.exe &lt;ClassName&gt;.class</font><br />
         对于 .NET 管理的代码程序：<font face="courier">Coverage /SaveTextData /Net &lt;ProgramName&gt;.exe</font><br />
         &nbsp;<br />
         使用 <font face="courier">/SaveTextData</font> 选项将导致 PureCoverage 在没有用户界面的情况下运行，且当您通过脚本运行程序时，将在程序终止时把数据发送到文本输出文件中。
    </li>
    <li style="LIST-STYLE-TYPE: none">
        <br />
         &nbsp;
    </li>
    <li>
        <b>在 UNIX 上</b>，请修改编译和链接行：<br />
         &nbsp;<br />
         对于 C/C++ 程序：<font face="courier">% purecov cc -g &lt;program_name&gt;.c</font><br />
         对于 Java 类文件：<font face="courier">% purecov -java java &lt;class_name&gt;</font><br />
         &nbsp;<br />
         使用 PureCoverage <font face="courier">-export</font> 选项可在程序退出后将覆盖率数据写入文本输出文件。
    </li>
</ul>
<p>
    当您执行代码时，PureCoverage 将记录有关使用的行和函数的数据。您可以通过自己的程序调用 PureCoverage API
    函数，以将数据保存在自己的代码内的特定位置，或仅为特定例程收集数据。当您退出程序时，将获得一组精确数据，指示测试覆盖了和未覆盖哪些行和函数。
</p>
<p>
    您可以合并多轮运行的覆盖率数据，或将其保存在不同的文件中来分析覆盖率方面的变化。
</p>
<p>
    使用脚本将当前数据与先前运行中收集的数据进行比较。如果覆盖率下降，则您的测试可能没有遇到新代码，或新代码可能引入了缺陷而导致大部分代码未被测试。请使用 Rational Robot 或 Rational Visual Test
    之类的测试工具撰写用于执行新代码的测试用例。
</p>
<p>
    <b>注</b>：您可以使用 PureCoverage 图形用户界面检查二进制覆盖率数据文件。
</p>
<p>
    <img height="15" alt="帮助手册图标" hspace="0" src="./../../../core.base_rup/resources/helpbook.gif" width="16" border="0" /> 有关更多信息，请查阅
    PureCoverage 联机帮助索引中的以下主题：
</p>
<ul>
    <li class="mvd-P">
        <i>running programs</i>
    </li>
    <li>
        <i>options</i>
    </li>
    <li class="mvd-P">
        <i>API functions</i>
    </li>
    <li class="mvd-P">
        <i>saving data</i>
    </li>
    <li class="mvd-P">
        <i>comparing data</i>
    </li>
</ul>
<h3>
    3. <a id="Step3" name="Step3"></a><b>在 Quantify 下运行程序来概要分析性能&nbsp;</b>
</h3>Quantify 为您的程序及其组件提供了一组完整且精确的性能数据，因此您可以在开发和测试周期的早期监视性能并确定回归。&nbsp; 
<p>
    首先将 Quantify 合并到您的现有 Perl 脚本、批处理文件和 makefile 中。
</p>
<ul>
    <li>
        <b>在 Windows 上</b>，修改运行您的程序或 Java 类文件、.jar 文件或 applet 的命令行，以包含 Quantify：<br />
         &nbsp;<br />
         对于 C/C++ 程序：<font face="courier">Quantify /SaveTextData &lt;ProgramName&gt;.exe</font><br />
         对于 Java 类文件：<font face="courier">Quantify /SaveTextData /Java Java.exe &lt;ClassName&gt;.class</font><br />
         对于 .NET 管理的代码程序：<font face="courier">Quantify /SaveTextData /Net &lt;ProgramName&gt;.exe</font><br />
         &nbsp;<br />
         使用 <font face="courier">/SaveTextData</font> 选项将导致 Quantify 不通过用户界面运行，且当您通过脚本运行程序时，将在程序终止时把数据发送到文本输出文件中。
    </li>
    <li style="LIST-STYLE-TYPE: none">
        <br />
         &nbsp;
    </li>
    <li>
        <b>在 UNIX 上</b>，请修改编译和链接行：<br />
         &nbsp;<br />
         对于 C/C++ 程序：<font face="courier">% quantify cc -g &lt;program_name&gt;.c</font><br />
         对于 Java 类文件：<font face="courier">% quantify -java java &lt;class_name&gt;</font><br />
         &nbsp;<br />
         使用 Quantify <font face="courier">-export</font> 选项可在程序退出后将性能数据写入文本输出文件。
    </li>
</ul>
<p>
    当您执行代码时，Quantify 将记录有关您程序性能的数据。您可以随时使用 API
    函数暂停和重新开始数据记录，以此来限制对特定的代码部分的概要分析。还可以在代码执行中的特定时间保存数据，或仅为特定例程收集性能数据。当您退出程序时，Quantify 将生成程序性能的精确概要文件。
</p>
<p>
    您可以撰写用于比较数据集并报告性能变化的脚本：
</p>
<ul>
    <li>
        性能下降可能表明最近检入的代码降低了程序的速度。 请分析收集的数据以找到性能不可接受的程序部分。
    </li>
    <li>
        标记的改进可能表明开发人员改进了他们的代码，或由于某种原因，您的测试已停止执行大部分代码。请检查您的覆盖率数据以了解是否仍然保持先前的覆盖率级别。
    </li>
</ul>
<p>
    <b>注</b>：Quantify 还可将测试数据保存为可使用 Quantify 图形用户界面检查的二进制文件；工具向导“使用 Rational PurifyPlus 工具分析运行时性能”中探讨了此信息。
</p>
<p>
    有关更多信息，请查看 Quantify 联机帮助索引中的以下主题：
</p>
<ul>
    <li>
        <i>running programs</i>
    </li>
    <li>
        <i>options</i>
    </li>
    <li>
        <i>API functions</i>
    </li>
    <li>
        <i>saving data</i>
    </li>
    <li>
        <i>comparing data</i>
    </li>
</ul><br />
<br /></td>
</tr>
</table>
</div>
<table cellpadding="0" cellspacing="0" border="0" class="copyright">
<tr>
<td class="copyright"><p>
    &copy; &nbsp;Copyright IBM Corp.&nbsp;1987, 2006. &nbsp;All Rights Reserved.
</p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script language="JavaScript" type="text/javascript">
				contentPage.onload();
			</script>
</html>
